package com.itheima.reggie.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author 程达
 * @PackageName:com.itheima.reggie.config
 * @ClassName:MybatisPlusConfig
 * @Description:
 * @date 2022/5/23 16:29
 **/
//配置MP的分页插件，这个底层是拦截器，aop的体现
//   IPage内部原理也是基于拦截器，但是这个拦截的是⽅法以及⽅法中的参数，这个也会判断是否是查询操作。
//    如果是查询操作，才会进⼊分页的处理逻辑。进⼊分页逻辑处理后，拦截器会通过反射获取该⽅法的参数
//     进⾏判断是否存在IPage对象的实现类。如果不存在则不进⾏分页，存在则将该参数赋值给IPage对象。
//      然后进⾏拼接sql的处理完成分页操作。
//       但是使⽤IPage需要注⼊⼀个bean拦截器交给spring进⾏管理。如下。否则不会进⾏拦截。
@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}
